import akshare as ak
import pandas as pd
import os
import sys
import traceback

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 导入项目模块
from data.fetcher import FinancialDataFetcher

def fix_stock_code_issue():
    """修复股票代码600900获取数据失败的问题"""
    print("\n===== 修复股票代码600900获取数据失败问题 =====")
    
    # 测试直接使用AKShare获取数据
    print("\n1. 直接使用AKShare获取600900数据...")
    try:
        # 测试不同格式的股票代码
        codes = ["600900", "sh600900"]
        
        for code in codes:
            print(f"\n尝试使用股票代码 {code}...")
            data = ak.stock_financial_report_sina(stock=code, symbol="资产负债表")
            
            if data is None or data.empty:
                print(f"✗ 使用 {code} 获取数据失败: 返回空数据")
            else:
                print(f"✓ 使用 {code} 获取数据成功! 数据形状: {data.shape}")
                print("数据列名:", list(data.columns)[:10], "..." if len(data.columns) > 10 else "")
                print("数据前3行:")
                print(data.head(3))
    except Exception as e:
        print(f"✗ 直接使用AKShare获取数据失败: {e}")
        traceback.print_exc()
    
    # 测试使用项目中的FinancialDataFetcher
    print("\n2. 使用项目中的FinancialDataFetcher获取600900数据...")
    try:
        fetcher = FinancialDataFetcher()
        data = fetcher.fetch_balance_sheet("600900")
        
        if data is None or data.empty:
            print("✗ 使用FinancialDataFetcher获取数据失败: 返回空数据")
        else:
            print(f"✓ 使用FinancialDataFetcher获取数据成功! 数据形状: {data.shape}")
            print("数据列名:", list(data.columns)[:10], "..." if len(data.columns) > 10 else "")
            print("数据前3行:")
            print(data.head(3))
    except Exception as e:
        print(f"✗ 使用FinancialDataFetcher获取数据失败: {e}")
        traceback.print_exc()
    
    # 提供修复建议
    print("\n===== 修复建议 =====")
    print("1. 如果AKShare能直接获取数据但FinancialDataFetcher失败，检查数据处理逻辑")
    print("2. 如果两者都失败，可能是网络问题或AKShare接口变更")
    print("3. 如果两者都成功，可能是Streamlit应用中的其他逻辑问题")

if __name__ == "__main__":
    fix_stock_code_issue()